﻿using System;
using System.Windows.Forms;

namespace AlphaNN.Forms
{
    public partial class InputBoxForm : Form
    {
        private InputBoxForm(string _caption, string _text)
        {            
            CaptionForm = _caption;
            TextInForm = _text;
            InitializeComponent();
        }

        /// <summary>
        /// Запрос
        /// </summary>
        /// <param name="Caption">Заголовок окна</param>
        /// <param name="Text">Текст</param>
        /// <param name="s_val">Значение которое будет на выходе</param>
        /// <returns>в случае если результат OK - истина, иначе ложь</returns>
        public static bool Query(string Caption, string Text, ref string s_val)
        {
            InputBoxForm ib = new InputBoxForm(Caption, Text);
            ib.textValue.Text = s_val;
            if (ib.ShowDialog() != DialogResult.OK) return false;
            s_val = ib.textValue.Text;
            return true;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="Caption"></param>
        /// <param name="Text"></param>
        /// <param name="prefix"></param>
        /// <param name="format"></param>
        /// <param name="value"></param>
        /// <param name="min"></param>
        /// <param name="max"></param>
        /// <returns></returns>
        public static bool InputValue(string Caption, string Text, string prefix, string format, ref int value, int min, int max)
        {
            int val = value;

            string s_val = prefix + value.ToString(format);
            bool OKVal;
            do
            {
                OKVal = true;
                if (!Query(Caption, Text, ref s_val)) return false;

                try
                {
                    string sTr = s_val.Trim();

                    if ((sTr.Length > 0) && (sTr[0] == '#'))
                    {
                        sTr = sTr.Remove(0, 1);
                        val = Convert.ToInt32(sTr, 16);
                    }
                    else if ((sTr.Length > 1) && ((sTr[1] == 'x') && (sTr[0] == '0')))
                    {
                        sTr = sTr.Remove(0, 2);
                        val = Convert.ToInt32(sTr, 16);
                    }
                    else
                        val = Convert.ToInt32(sTr, 10);
                }
                catch { MessageBox.Show("Требуется ввести число!"); OKVal = false; }
                if ((val < min) || (val > max)) { MessageBox.Show("Требуется число в диапазоне " + min.ToString() + "..." + max.ToString() + " !"); OKVal = false; }
            } while (!OKVal);
            value = val;
            return true;
        }
    }
}

